<?php
require_once "..\Entities\User.php";

class UserRepository
{
	public function InsertUser($user) //Listo
	{
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->set_charset('utf8');
		
		// Check connection
		if (!isset($connection))
		{
			throw new Exception('Error al conectar con la base de datos: ' . $connection->connect_error);
		}
		
		$query = 'INSERT INTO usuario (nombre_usuario, pass, nombre, apellidos, email, fecha_nacimiento, sexo, telefono_movil, fecha_alta, fecha_baja, 	timestamp, foto_perfil) VALUES (?,?,?,?,?,?,?,?,?,?,NOW(),?)';
		
		$nombreusr = $user->GetUserName();
		$pass = $user->GetPassword();
		$nombre = $user->GetName();
		$apellidos = $user->GetLastName();
		$email = $user->GetEmail();
		$fnac = $user->GetBirthday();
		$sexo = $user->GetGender();
		$tlfmovil = $user->GetMobilePhone();
		$falta = $user->GetStartDate();
		$fbaja = $user->GetEndDate();
		$avat = $user->GetAvatar();
		
		if ($stmt = $connection->prepare($query))
		{
			//bind parameters for markers			
			if(!$stmt->bind_param('sssssssssss', $nombreusr,$pass,$nombre,$apellidos,$email,$fnac,$sexo,$tlfmovil,$falta,$fbaja,$avat))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error al procesar parametros: ' . $connection->error);
			}
			
			//execute query
			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la consulta: ' . $connection->error);
			}
			$stmt->close();			
		}
		//echo print_r($stmt);
		$connection->close();
		
	
		// insert into usuario values ( entidad usuario);
		// return 0; // resultado ok
		// return 1; // "no se pudo insertar user por motivo x
		
		/*if(!isset($user) || !is_a($user, "User"))
		 {
		throw new Exception('Usuario no válido para dar de alta en la aplicación.');
		}

		$userQuery = 'INSERT INTO Usuario VALUES(?,?,?,?,?,?)';
		$avatarQuery = 'INSERT INTO UsuarioAvatar VALUES(?,?)';

		try
		{
		$this->connectionManager->OpenTransaction();

		$userParams = array(
				's'=>$user->GetUserName(),
				's' => $user->GetPassword(),
				's'=>$user->GetName(),
				's'=>$user->GetBirthday(),
				's'=>$user->GetEmail(),
				's'=>$user->GetTwitter()
		);

		$userResult = $this->connectionManager->Execute($userQuery, $userParams);

		$avatarParams = array(
				'i'=>$userResult->insertId,
				'b'=>$user->GetAvatar()
		);

		$avatarResult = $this->connectionManager->Execute($avatarQuery, $avatarParams);

		$this->connectionManager->DoCommit();
		}
		catch (Exception $e)
		{
		$this->connectionManager->DoRollback();
		}*/
	}

	public function UpdateUser($user) //Listo
	{		
		$exito = false;
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->set_charset('utf8');
		 
		if (!isset($connection))
		{
			throw new Exception('Error al conectar con la base de datos: '.$connection->connect_error);
		}
		 
		$query = 'UPDATE usuario SET nombre_usuario = ?, pass = ?, nombre = ?, apellidos = ?, email = ?,fecha_nacimiento = ?, sexo = ?, telefono_movil = ?, foto_perfil = ? WHERE cod_usuario = ?';
		 
		if ($stmt = $connection->prepare($query))
		{
			$nus = $user->GetUserName();
			$pss = $user->GetPassword();
			$nom = $user->GetName();
			$ape = $user->GetLastName();
			$ema = $user->GetEmail();
			$fec = $user->GetBirthday();
			$gen = $user->GetGender();
			$tel = $user->GetMobilePhone();
			$fpr = $user->GetAvatar();
			$cod = $user->GetId();
			 
			if(!$stmt->bind_param('ssssssssss',$nus,$pss,$nom,$ape,$ema,$fec,$gen,$tel,$fpr,$cod))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en el procesamiento de parametros: ' . $connection->error);
			}
			 
			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $connection->error);
			}
		}
		$stmt->close();
		$connection->close();
		$exito = true;
		return $exito;
				
		//user.nombre = ...
		//user.ape = ...
		//user.twitter = $form
		// update usuario set values del form where userId = user.userid 
				
		// return 0; // resultado ok
		// return 1; // "no se pudo actualizar user por motivo x
	}

	public function DeleteUser($userName) //Listo
	{
		
		$exito = false;
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->set_charset('utf8');
		if (!isset($connection))
		{
			throw new Exception('Error al conectar con la base de datos: '.$connection->connect_error);
		}
		$query = 'UPDATE usuario SET fecha_baja = now() WHERE cod_usuario = ?';
		if ($stmt = $connection->prepare($query))
		{
			if(!$stmt->bind_param('s',$cod_usuario))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en el procesamiento de parametros: ' . $connection->error);
			}
			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $connection->error);
			}
		}
		$stmt->close();
		$connection->close();
		$exito = true;
		return $exito;
		
		
		
		// update usuario set fecha_baja = now() where user.nombre = userName; 
		// return 0; // resultado ok
		// return 1; // "no se pudo borrar user por motivo x
		
		/*$userQuery = 'DELETE FROM Usuario WHERE IdUsuario = ?';
		 $avatarQuery = 'DELETE FROM  UsuarioAvatar WHERE IdUsuario = ?';
		$commentsQuery = 'DELETE FROM  Comentario WHERE IdUsuario = ?';
		$friendQuery = 'DELETE FROM  UsuarioAmigo WHERE IdUsuarioDe = ? OR IdUsuario = ?';

		try
		{
		$this->connectionManager->OpenTransaction();

		$params = array(
				'i'=>$user->GetUserId()
		);

		$friendParams = array(
				'i'=>$user->GetUserId(),
				'i'=>$user->GetUserId()
		);

		$commentsResult = $this->connectionManager->Execute($commentsQuery, '', $params);

		if(!$commentsResult->success)
		{
		throw new Exception('Error al eliminar los comentarios del usuario. ' . $commentsResult->error);
		}

		$friendResult = $this->connectionManager->Execute($friendQuery, $friendParams);

		if(!$friendResult->success)
		{
		throw new Exception('Error al desvincular los amigos del usuario. ' . $friendResult->error);
		}

		$avatarResult = $this->connectionManager->Execute($avatarQuery, '', $params);

		if(!$avatarResult->success)
		{
		throw new Exception('Error al eliminar el avatar del usuario. ' . $avatarResult->error);
		}

		$userResult = $this->connectionManager->Execute($userQuery, '', $params);

		if(!$userResult->success)
		{
		throw new Exception('Error al eliminar el usuario. ' . $userResult->error);
		}

		$this->connectionManager->DoCommit();
		}
		catch (Exception $e)
		{
		$this->connectionManager->DoRollback();
		}*/
	}

	public function GetUserById($userId) //Pendiente
	{
		//??
	}

	public function CheckUserName($userName) //Listo
	{
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->autocommit(FALSE);
		$connection->set_charset('utf8');

		// Check connection
		if (!isset($connection))
		{
			throw new Exception('Error en la conexión con la base de datos: ' . $connection->connect_error);
		}

		$userName = mysqli_real_escape_string($connection, $userName);

		$userQuery = 'SELECT COUNT(*) AS numeroUsuario FROM usuario WHERE nombre_usuario = ?';

		if ($stmt = $connection->prepare($userQuery))
		{
			//bind parameters for markers
			if(!$stmt->bind_param('s', $userName))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la procesamiento de los parámetros de la consulta: ' . $connection->error);
			}

			//execute query
			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la ejecución de la consulta: ' . $connection->error);
			}

			$data = $stmt->get_result();
			if(!isset($data) || !$data)
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la obtención de los datos: ' . $connection->error);
			}

			$userData = $data->fetch_array(MYSQLI_ASSOC);

			if(isset($userData))
			{
				$stmt->close();
				$connection->close();
				return $userData['numeroUsuario'];

			}
			else
			{
				$stmt->close();
				$connection->close();
				throw new Exception('El usuario no existe');
			}
		}
		else
		{
			if(isset($stmt))
			{
				$stmt->close();
				$connection->close();
			}
			throw new Exception('Error en la preparación de la BD: '  . $connection->error);
		}
	}

	public function GetUserForLogin($userName, $password) //Listo
	{
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->autocommit(FALSE);
		$connection->set_charset('utf8');

		// Check connection
		if (!isset($connection))
		{
			throw new Exception('Error en la conexión con la base de datos: ' . $connection->connect_error);
		}

		$userName = mysqli_real_escape_string($connection, $userName);
		$password = mysqli_real_escape_string($connection, $password);

		$userQuery = 'SELECT * FROM usuario WHERE nombre_usuario = ? AND pass = ? AND fecha_baja > now()';

		if ($stmt = $connection->prepare($userQuery))
		{
			//bind parameters for markers
			if(!$stmt->bind_param('ss', $userName, $password))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la procesamiento de los parámetros de la consulta: ' . $connection->error);
			}

			//execute query
			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la ejecución de la consulta: ' . $connection->error);
			}

			//$stmt->bind_result();
			//retrieve the data
			//$data = $stmt->get_result();
			/*if(!$stmt->fetch())
			{
			$stmt->close();
			$connection->close();
			throw new Exception('Error en la obtención de los datos: ' . $connection->error);
			}*/

			$data = $stmt->get_result();
			if(!isset($data) || !$data)
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la obtención de los datos: ' . $connection->error);
			}
				
			$userData = $data->fetch_array(MYSQLI_ASSOC);

			if(isset($userData))
			{
				$user = new User();

				$user->SetId($userData['cod_usuario']);
				$user->SetUserName($userData['nombre_usuario']);
				$user->SetPassword($userData['pass']);
				$user->SetName($userData['nombre'] . ' ' . $userData['apellidos']);
				$user->SetEmail($userData['email']);
				$user->SetBirthday($userData['fecha_nacimiento']);
				$user->SetGender($userData['sexo']);
				$user->SetMobilePhone($userData['telefono_movil']);
				$user->SetStartDate($userData['fecha_alta']);
				$user->SetEndDate($userData['fecha_baja']);

				$stmt->close();
				$connection->close();
				return $user;

			}
			else
			{
				$stmt->close();
				$connection->close();
				throw new Exception('El usuario no existe');
			}
		}
		else
		{
			if(isset($stmt))
			{
				$stmt->close();
				$connection->close();
			}
			throw new Exception('Error en la preparación de la BD: '  . $connection->error);
		}
	}

	public function GetUserFriends($cod_usuario) //Pendiente
	{
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->set_charset('utf8');

		if (!isset($connection))
		{
			throw new Exception('Error al conectar con la base de datos: '.$connection->connect_error);
		}

		$queryamigos = 'select amistades.cod_usuario_sol_amistad as cod_usuario,usuario.nombre,usuario.apellidos from amistades, usuario where amistades.cod_usuario_sol_amistad = usuario.cod_usuario AND amistades.cod_usuario = ?';
		$querymasamigos = 'select amistades.cod_usuario, usuario.nombre,usuario.apellidos from amistades, usuario where amistades.cod_usuario = usuario.cod_usuario AND amistades.cod_usuario_sol_amistad = 2 and estado_amistad = A';

		if ($stmt = $connection->prepare($queryamigos))
		{
			if(!$stmt->bind_param('i',$cod_usuario))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en el procesamiento de parametros: ' . $connection->error);
			}
				

			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $connection->error);
			}
				
			$data = $stmt->get_result();
				
			if ($stmt = $connection->prepare($querymasamigos))
			{
				if(!$stmt->bind_param('i',$cod_usuario))
				{
					$stmt->close();
					$connection->close();
					throw new Exception('Error en el procesamiento de parametros: ' . $connection->error);
				}
					
					
				if(!$stmt->execute())
				{
					$stmt->close();
					$connection->close();
					throw new Exception('Error en la ejecucion de la consulta: ' . $connection->error);
				}

				$data = $stmt->get_result();
				$stmt->close();
			}
				
				
			if(!isset($data) || !$data)
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error al obtener los datos: ' . $connection->error);
			}
				
			while($userData = $data->fetch_array(MYSQLI_ASSOC))
			{
				if(isset($userData))
				{
					$user = new User();

					$user->SetId($userData['cod_usuario']);
					$user->SetName($userData['nombre']);
					$user->SetLastName($userData['apellidos']);
					print_r($user);
				}
			}
		}
		$connection->close();		
	}

	public function DeleteUserFriend($cod_amigo1,$cod_amigo2) //Listo
	{
<<<<<<< .mine
	
=======
>>>>>>> .r49
		$exito = false;
		$connection = new mysqli("localhost","root","","db_maravillosos80");
		$connection->set_charset('utf8');
		 
		if (!isset($connection))
		{
			throw new Exception('Error al conectar con la base de datos: '.$connection->connect_error);
		}
<<<<<<< .mine
			
		$query = 'UPDATE amistades SET estado_amistad = "C" WHERE ((cod_usuario = ? AND cod_usuario_sol_amistad = ?) OR (cod_usuario = ? AND cod_usuario_sol_amistad = ?))'; //pte incompleta
			
=======
		 
		$query = 'UPDATE amistades SET estado_amistad = "C" WHERE ((cod_usuario = ? AND cod_usuario_sol_amistad = ?) OR (cod_usuario = ? AND cod_usuario_sol_amistad = ?))'; //pte incompleta
		 
>>>>>>> .r49
		if ($stmt = $connection->prepare($query))
		{
			$ami1 = $cod_amigo1;
			$ami2 = $cod_amigo2;
			if(!$stmt->bind_param('iiii',$ami1,$ami2,$ami2,$ami1))
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en el procesamiento de parametros: ' . $connection->error);
			}
		
			if(!$stmt->execute())
			{
				$stmt->close();
				$connection->close();
				throw new Exception('Error en la ejecucion de la consulta: ' . $connection->error);
			}
		}
		$stmt->close();
		$connection->close();
		$exito = true;
		return $exito;
	}
	
	public function FindPossibleUserFriends ($cod_usuario) //Pendiente
	{
		// select * from amistades where cod_usuario not in (cod_usuario_sol_amistad or cod_usuario)
		// array de IDs
		// montar tantas entidades user como array
		
		// return array de entidades user como array
		
		
	}
	
	/*public function GetUserAvatar($user)
	{
		$avatarQuery = 'SELECT avatar FROM UsuarioAvatar WHERE IdUsuario = ?';

		$params = array(
				'i'=>$user->GetUserId()
		);
			
		$avatarResult = $this->connectionManager->Execute($avatarQuery, '', $params);

		if($avatarResult->success)
		{
		return $avatarResult->result['avatar'];
		}

		return null;
	}*/
}
?>